/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.kleintjes.structural.flyweight_pattern.factory;

import com.kleintjes.structural.flyweight_pattern.Flyweight;
import com.kleintjes.structural.flyweight_pattern.Impl.FlyweightAdder;
import com.kleintjes.structural.flyweight_pattern.Impl.FlyweightMultiplier;
import java.util.HashMap;
import java.util.Map;

/**
 *
 * @author Hughan.Kleintjes.hughanK@gmail.com
 */
public class FlyweightFactory {
    
    private static FlyweightFactory flyweightFactory;
    private Map<String, Flyweight> flyweightPool;
    
    private FlyweightFactory() {
        flyweightPool =  new HashMap<String, Flyweight>();
    }
    
    public static FlyweightFactory getInstance() {
        if (flyweightFactory == null) {
            flyweightFactory = new FlyweightFactory();
        }
        return flyweightFactory;
    }
    
    public Flyweight getFlyweight (String key) {
        if( flyweightPool.containsKey(key) ) {
            return flyweightPool.get(key);
        } else {
            Flyweight flyweight;
            if( "add".equals(key) ) {
                flyweight = new FlyweightAdder();
            } else {
                flyweight= new FlyweightMultiplier();
            }
            flyweightPool.put(key, flyweight);
            return flyweight;
        } 
    }
    
}
